﻿#include "IniConfig.h"
IniConfig::IniConfig(QString iniFileName)
{
    m_IniFile = new QSettings(iniFileName, QSettings::IniFormat);
#if QT_VERSION >= 0x060000
// Qt 6 的代码
#else
    // Qt 5 的代码
    m_IniFile->setIniCodec("utf-8");
#endif
}

IniConfig::~IniConfig()
{
    delete m_IniFile;
}
//读取节点下的键值
QVariant IniConfig::value(QString node, QString key, QVariant defaultValue)
{
    endGroup();
    return m_IniFile->value(QString("%1/%2").arg(node, key), defaultValue);;
}
//写入节点下的键值
void IniConfig::setValue(QString node, QString key, QVariant value)
{
    endGroup();
    m_IniFile->setValue(QString("%1/%2").arg(node, key), value);
}
//设置节点
void IniConfig::beginGroup(QString node)
{
    m_IniFile->beginGroup(node);
}
//设置键值
void IniConfig::setValue(QString key, QString value)
{
    m_IniFile->setValue(key, value);
}
//读取值
QVariant IniConfig::value(QString key, QVariant defaultValue)
{
    return m_IniFile->value(key, defaultValue);
}
//结束节点
void IniConfig::endGroup()
{
    m_IniFile->endGroup();
}
//读取节点下的所有键值
QMap<QString, QVariant> IniConfig::readNode(QString node)
{
    QMap<QString, QVariant> valueMap;
    beginGroup(node);
    QStringList keys = childKeys();
    for(QString key : keys){
        valueMap.insert(key, value(key, QVariant()));
    }
    endGroup();
    return valueMap;
}
//移除不在节点下得所有键值
void IniConfig::removeAllKey()
{
    endGroup();
    QStringList tkeys = childKeys();
    for(QString key : tkeys){
        removeKey(key);
    }
}
//清空
void IniConfig::clear()
{
    m_IniFile->clear();
}
//移除节点键值
void IniConfig::removeKey(QString node,QString key)
{
    endGroup();
    m_IniFile->remove(QString("%1/%2").arg(node, key));
}
//移除键值
void IniConfig::removeKey(QString key)
{
    m_IniFile->remove(key);
}
//移除节点
void IniConfig::removeNode(QString node)
{
    endGroup();
    m_IniFile->remove(node);
}
//子节点
QStringList IniConfig::childGroups()
{
    endGroup();
    return m_IniFile->childGroups();
}
//子键值
QStringList IniConfig::childKeys()
{
    endGroup();
    return m_IniFile->childKeys();
}
QStringList IniConfig::childKeys(QString node)
{
    beginGroup(node);
    QStringList keys = m_IniFile->allKeys();
    endGroup();
    return keys;
}






